/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package savet.gui.modelos;

import java.util.Date;
import java.util.List;
import savet.entidades.Empregador;
import savet.entidades.atributos.AtributoData;
import savet.util.LoteUtil;

/**
 * Modelo para tabelas que utilizam {@link AtributoData}.
 * @author Adisson Marinho
 */
public abstract class AbstractAtributoDataModel extends AbstractTrabalhadoresModel {

    protected Object [] colunas;

    protected Date inicioPeriodo;

    protected Date fimPeriodo;

    public AbstractAtributoDataModel(Object [] colunas, Date inicio, Date fim) {
        this.colunas = colunas;
        this.inicioPeriodo = inicio;
        this.fimPeriodo = fim;
        carregarAtributos();
    }

    public AbstractAtributoDataModel(Object [] colunas) {
        this.colunas = colunas;
        Empregador empregadorAtual = LoteUtil.getInstance().getEmpregadorAtual();
        if (empregadorAtual != null) {
            inicioPeriodo = empregadorAtual.getInicioPeriodoNotificado();
            fimPeriodo = empregadorAtual.getFimPeriodoNotificado();
        } else {
            inicioPeriodo = new Date();
            fimPeriodo = new Date();
        }
        carregarAtributos();
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return AtributoData.class;
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    @Override
    public String getColumnName(int column) {
        return colunas[column].toString();
    }

    /**
     * Atualiza uma lista de atributos novas com os atributos ja auditados anteriormente.
     *
     * @param newLista          lista contendo os atributos novos
     * @param oldLista          lista contendo os atributos antes da atualizacao
     */
    protected void atualizaListaAtributos(List<AtributoData> newLista, List<AtributoData> oldLista) {
        for (int i = 0; i < newLista.size(); i++) {
            int index = oldLista.indexOf(newLista.get(i));
            if (index != -1) {
                AtributoData oldAtt = oldLista.get(index);
                if (oldAtt.getEstado() != AtributoData.NAO_NOTIFICADO) {
                    newLista.set(i, oldAtt);
                }
            }
        }
    }

    protected abstract void carregarAtributos();

}
